In the field of transaction processing, units of work are generally required to have what are known as the ACID properties. ACID is an acronym representing the following four unit-of-work properties: Atomicity, Consistency, Isolation and Durability. Atomicity requires that either all the operations of the unit of work must be seen to occur or none must be seen to occur. Consistency requires a unit of work to maintain the consistency of the data on which it operates. Isolation requires a unit of work not to read the intermediate results of another transaction. Durability requires the results of a committed unit of work to be made permanent and that the other ACID attributes can be guaranteed even in the event of system failure.
For example, a well known and understood unit of work is a transaction, and it is the role of a transaction coordinator or middleware to provide atomicity. Thus, for example, if an application involves two operations in a transaction and then requests the transaction co-ordinator to commit the transaction, the transaction co-ordinator must ensure that both operations commit (succeed). Alternatively, if the application requests the transaction co-ordinator to back out the transaction, the transaction coordinator must ensure that both operations are backed out (fail).
A major problem in providing atomicity is that it must be guaranteed even in the event of failure associated with a system on which the transaction coordinator and/or a participant are executing. It will be appreciated that such a failure may relate to a loss of power or the failure of a hardware device such as on board memory or a DASD holding a database. For example, if a transaction involves two operations and then commits, the system might fail after the transaction co-ordinator has committed the first operation but before the same has been done for the second operation. As a result, when the system is restarted, the transaction coordinator must ensure that the second operation also commits.
It may not always be possible to install a transaction coordinator in an environment, for example, because software associated with the transaction co-ordinator is costly or because an administrative burden associated with installing and maintaining the transaction coordinator is complex and costly.